package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IOperationEmpRecordDAO;
import org.jsola.hr.dto.OperationEmpRecordAddDTO;
import org.jsola.hr.dto.OperationEmpRecordUpdateDTO;
import org.jsola.hr.entity.EmpInfoDO;
import org.jsola.hr.entity.OperationEmpRecordDO;
import org.jsola.hr.query.OperationEmpRecordQuery;
import org.jsola.hr.vo.*;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 操作员工记录表
 *
 * @author zhr
 */
public interface IOperationEmpRecordService extends IService<IOperationEmpRecordDAO, OperationEmpRecordDO> {

    /**
     * 员工记录通用接口
     *
     * @param companyId      用工单位Id
     * @param queryType      查询类型
     * @param userId         被记录人的userId
     * @param empId          被记录人的empId
     * @param checkInId      被记录人的checkInId
     * @param empStatus      员工状态
     * @param sourceType     录入方式
     * @param sourceTypeInfo 录入方式具体信息
     * @param methodPath     执行方法全路径
     * @param tokenUser      当前用户
     * @return void
     */
    Void currencyAdd(String companyId, Integer queryType, String userId, String empId, String checkInId, Integer empStatus,
                     Integer sourceType, String sourceTypeInfo, String methodPath, TokenUser tokenUser);

    /**
     * 查询花名册或员工概览今日新增人员page
     *
     * @param operationEmpRecordQuery 操作员工记录表查询参数
     * @param tokenUser               当前用户
     * @return page
     */
    Page<EmpInfoVO> queryEmpPageList(OperationEmpRecordQuery operationEmpRecordQuery, TokenUser tokenUser);

    /**
     * 查询预登记今日新增人员page
     *
     * @param operationEmpRecordQuery 操作员工记录表查询参数
     * @param tokenUser               当前用户
     * @return page
     */
    Page<CheckInPeopleListVO> queryPageList(OperationEmpRecordQuery operationEmpRecordQuery, TokenUser tokenUser);

    /**
     * 查询今日新增数量相关参数
     *
     * @param operationEmpRecordQuery 操作员工记录表查询参数
     * @param tokenUser               当前用户
     * @return 操作员工记录表展示对象
     */
    OperationEmpRecordListVO queryCount(OperationEmpRecordQuery operationEmpRecordQuery, TokenUser tokenUser);

    /**
     * 新增操作员工记录表
     *
     * @param operationEmpRecordAddDTO 新增操作员工记录表DTO
     * @param tokenUser                当前用户
     * @return 操作员工记录表详情信息
     */
    OperationEmpRecordVO save(OperationEmpRecordAddDTO operationEmpRecordAddDTO, TokenUser tokenUser);

    /**
     * 修改操作员工记录表
     *
     * @param operationEmpRecordUpdateDTO 修改操作员工记录表DTO
     * @param tokenUser                   当前用户
     * @return 更新数量
     */
    int update(OperationEmpRecordUpdateDTO operationEmpRecordUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除操作员工记录表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser             当前用户
     * @param operationEmpRecordIds 操作员工记录表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... operationEmpRecordIds);

    /**
     * 根据操作员工记录表id查找
     *
     * @param operationEmpRecordId 操作员工记录表id
     * @param siteId               所属站点id
     * @return 操作员工记录表详情信息
     */
    OperationEmpRecordVO selectById(String operationEmpRecordId, String siteId);

    /**
     * 查询操作员工记录表
     *
     * @param operationEmpRecordQuery 查询条件
     * @param siteId                  所属站点id
     * @return 操作员工记录表列表信息
     */
    List<OperationEmpRecordListVO> select(OperationEmpRecordQuery operationEmpRecordQuery, String siteId);

    /**
     * 查询操作员工记录表记录数
     *
     * @param operationEmpRecordQuery 查询条件
     * @param siteId                  所属站点id
     * @return 操作员工记录表记录数
     */
    int selectCount(OperationEmpRecordQuery operationEmpRecordQuery, String siteId);

    /**
     * 分页查询操作员工记录表
     *
     * @param operationEmpRecordQuery 查询条件
     * @param siteId                  所属站点id
     * @return 操作员工记录表列表信息
     */
    Page<OperationEmpRecordListVO> selectPage(OperationEmpRecordQuery operationEmpRecordQuery, String siteId);


    /**
     * 根据操作员工记录表id查找
     *
     * @param operationEmpRecordId 操作员工记录表id
     * @param siteId               所属站点id
     * @return 操作员工记录表
     */
    OperationEmpRecordDO selectDOById(String operationEmpRecordId, String siteId);

    /**
     * 查询操作员工记录表
     *
     * @param operationEmpRecordQuery 查询条件
     * @param siteId                  所属站点id
     * @return 操作员工记录表列表
     */
    List<OperationEmpRecordDO> selectDO(OperationEmpRecordQuery operationEmpRecordQuery, String siteId);

    /**
     * 导入员工时同步记录操作员工记录
     *
     * @param empInfoAddList 导入员工数据
     * @param tokenUser      当前用户
     */
    void importEmpBatchSave(List<EmpInfoDO> empInfoAddList, TokenUser tokenUser);

}


